/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package utilitario;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Rodrigo
 */
public class Arquivo {

    //metodo para criar arquivo com lista de funcionarios
    public static void armazenarFuncionario(ArrayList<Funcionario> lista) {
        try {
            FileOutputStream fos = new FileOutputStream("docs/funcionarios.dat");
            try {
                ObjectOutputStream obj = new ObjectOutputStream(fos);
                System.out.println("Criando arquivo");
                obj.writeObject(lista);

            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Não pode ser criado");
        }


    }

    //metodo para criar arquivo com lista de clientes
    public static void armazenarCliente(ArrayList<Cliente> lista) {
        try {
            FileOutputStream fos = new FileOutputStream("docs/clientes.dat");
            try {
                ObjectOutputStream obj = new ObjectOutputStream(fos);
                System.out.println("Criando arquivo");
                obj.writeObject(lista);

            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Não pode ser criado");
        }


    }

    public static void armazenarPedido(ArrayList<pedido_compra_forn> lista) {
        try {
            FileOutputStream fos = new FileOutputStream("docs/pedidos.dat");
            try {
                ObjectOutputStream obj = new ObjectOutputStream(fos);
                System.out.println("Criando arquivo");
                obj.writeObject(lista);

            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Não pode ser criado");
        }


    }

    public static void armazenarcPedido(ArrayList<produtos_estoque> lista) {
        try {
            FileOutputStream fos = new FileOutputStream("docs/produtos_confirmados.dat");
            try {
                ObjectOutputStream obj = new ObjectOutputStream(fos);
                System.out.println("Criando arquivo");
                obj.writeObject(lista);

            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Não pode ser criado");
        }


    }

    public static void armazenarProduto(ArrayList<cad_produto> lista) {
        try {
            ObjectOutputStream arquivo = new ObjectOutputStream(new FileOutputStream(new File("docs/Estoque.bat")));
            arquivo.writeObject(lista);
        } catch (Exception erro) {
            System.out.println("ERRO AO GRAVAR!!");
        }
    }

    public static ArrayList<cad_produto> lerProduto() {
        ArrayList a = new ArrayList();
        try {
            FileInputStream fis = new FileInputStream("docs/Estoque.bat");
            try {
                ObjectInputStream obj = new ObjectInputStream(fis);
                System.out.println("Lendo arquivo");
                return (a = (ArrayList<cad_produto>) obj.readObject());
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            System.out.println("Não foi encontrado o arquivo");
            armazenarProduto(a);
            return a;
        }
        return a;
    }

    //metodo para ler lista de funcionarios
    public static ArrayList<Funcionario> lerFuncionario() {
        ArrayList a = new ArrayList();
        try {
            FileInputStream fis = new FileInputStream("docs/funcionarios.dat");
            try {
                ObjectInputStream obj = new ObjectInputStream(fis);
                System.out.println("Lendo arquivo");
                return (a = (ArrayList<Funcionario>) obj.readObject());
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            System.out.println("Não foi encontrado o arquivo");
            armazenarFuncionario(a);
            return a;
        }
        return a;
    }

    //metodo para ler lista de clientes
    public static ArrayList<Cliente> lerCliente() {
        ArrayList a = new ArrayList();
        try {
            FileInputStream fis = new FileInputStream("docs/clientes.dat");
            try {
                ObjectInputStream obj = new ObjectInputStream(fis);
                System.out.println("Lendo arquivo");
                return (a = (ArrayList<Cliente>) obj.readObject());
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            System.out.println("Não foi encontrado o arquivo");
            armazenarCliente(a);
            return a;
        }
        return a;
    }

    public static ArrayList<pedido_compra_forn> lerPedido() {
        ArrayList a = new ArrayList();
        try {
            FileInputStream fis = new FileInputStream("docs/pedidos.dat");
            try {
                ObjectInputStream obj = new ObjectInputStream(fis);
                System.out.println("Lendo arquivo");
                return (a = (ArrayList<pedido_compra_forn>) obj.readObject());
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            System.out.println("Não foi encontrado o arquivo");
            return a;
        }
        return a;
    }

    public static ArrayList<produtos_estoque> lercPedido() {
        ArrayList a = new ArrayList();
        try {
            FileInputStream fis = new FileInputStream("docs/produtos_confirmados.dat");
            try {
                ObjectInputStream obj = new ObjectInputStream(fis);
                System.out.println("Lendo arquivo");
                return (a = (ArrayList<produtos_estoque>) obj.readObject());
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            System.out.println("Não foi encontrado o arquivo");
            return a;
        }
        return a;
    }

    public static void armazenarFuncionarioTemporariamente(ArrayList<Funcionario> lista) {
        try {
            FileOutputStream fos = new FileOutputStream("docs/tempfuncionarios.dat");
            try {
                ObjectOutputStream obj = new ObjectOutputStream(fos);
                System.out.println("Criando arquivo");
                obj.writeObject(lista);
            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("IOException no metodo criar funcionario temporario");
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("O arquivo não pode ser criado");
        }


    }

    //metodo para ler lista de funcionarios
    public static ArrayList<Funcionario> lerFuncionarioTemporariamente() {
        ArrayList<Funcionario> a = new ArrayList<>();
        try {
            FileInputStream fis = new FileInputStream("docs/tempfuncionarios.dat");
            try {
                ObjectInputStream obj = new ObjectInputStream(fis);
                System.out.println("Lendo arquivo");
                return (ArrayList<Funcionario>) obj.readObject();
            } catch (ClassNotFoundException ex) {
                System.out.println("Classe not found");
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                System.out.println("IOException no metodo de leitura de funcionario temporario");
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            armazenarFuncionarioTemporariamente(a);
        }
        return a;
    }

    public static void deletFuncionarioTemporario() {
        File f = new File("docs/tempfuncionarios.dat");
        if (f.delete() == true) {
            System.out.println("Arquivo deletado com sucesso");
        }
    }

    public static void armazenarAdmin(Funcionario admin) {
        try {
            FileOutputStream fos = new FileOutputStream("docs/admin.dat");
            try {
                ObjectOutputStream obj = new ObjectOutputStream(fos);
                System.out.println("Criando arquivo");
                obj.writeObject(admin);

            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Não pode ser criado");
        }


    }

    public static Funcionario lerAdmin() {
        Funcionario admin = new Funcionario();
        admin.setLogin("adminpoo");
        admin.setSenha("poo");
        admin.setNivel_de_acesso(5);

        try {
            FileInputStream fis = new FileInputStream("docs/admin.dat");
            try {
                ObjectInputStream obj = new ObjectInputStream(fis);
                System.out.println("Lendo arquivo");
                return ((Funcionario) obj.readObject());
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            System.out.println("Não foi encontrado o arquivo");
            armazenarAdmin(admin);
            return admin;


        }
        return admin;
    }

    public static void amarzenarPedidoCompra(ArrayList<pedido_compra_cliente> lista) {
        try {
            ObjectOutputStream obj = new ObjectOutputStream(new FileOutputStream(new File("docs/pedido_cliente.dat")));
            obj.writeObject(lista);
        } catch (IOException ex) {
            Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);

        }


    }

    public static ArrayList<pedido_compra_cliente> ler_pedidoCompra() {
        ArrayList<pedido_compra_cliente> a = new ArrayList<>();
        try {
            FileInputStream fis = new FileInputStream("docs/pedido_cliente.dat");
            try {

                ObjectInputStream obj = new ObjectInputStream(fis);
                System.out.println("Lendo arquivo");
                return (ArrayList<pedido_compra_cliente>) obj.readObject();

            } catch (ClassNotFoundException | IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }

        } catch (FileNotFoundException ex) {
            System.out.println("Não foi encontrado o arquivo");
            amarzenarPedidoCompra(a);
            return a;
        }
        return a;



    }

    //metodo para gravar nota fisical
    public static void armazenarNotaFisical(ArrayList<NotaFiscal> lista) {
        try {
            FileOutputStream fos = new FileOutputStream("docs/notas_fiscais.dat");
            try {
                ObjectOutputStream obj = new ObjectOutputStream(fos);
                System.out.println("Criando arquivo");
                obj.writeObject(lista);

            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Não pode ser criado");
        }


    }

    //lendo notas fiscais
    public static ArrayList<NotaFiscal> lerNotalFiscal() {
        ArrayList a = new ArrayList();
        try {
            FileInputStream fis = new FileInputStream("docs/notas_fiscais.dat");
            try {
                ObjectInputStream obj = new ObjectInputStream(fis);
                System.out.println("Lendo arquivo");
                return (a = (ArrayList<NotaFiscal>) obj.readObject());
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            System.out.println("Não foi encontrado o arquivo");
            armazenarNotaFisical(a);
            return a;
        }
        return a;
    }

    public static void armazenarLucro(ArrayList<lucro> lista) {
        try {
            FileOutputStream fos = new FileOutputStream("docs/lucro.dat");
            try {
                ObjectOutputStream obj = new ObjectOutputStream(fos);
                System.out.println("Criando arquivo");
                obj.writeObject(lista);

            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Não pode ser criado");
        }

    }

    public static ArrayList<lucro> lerLucro() {
        ArrayList a = new ArrayList();
        try {
            FileInputStream fis = new FileInputStream("docs/lucro.dat");
            try {
                ObjectInputStream obj = new ObjectInputStream(fis);
                System.out.println("Lendo arquivo");
                return (a = (ArrayList<lucro>) obj.readObject());
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            System.out.println("Não foi encontrado o arquivo");
            armazenarLucro(a);
            return a;
        }
        return a;
    }

    public static void armazenarJuros(juros p){

          try {
            FileOutputStream fos = new FileOutputStream("docs/juros.dat");
            try {
                ObjectOutputStream obj = new ObjectOutputStream(fos);
                System.out.println("Criando arquivo");
                obj.writeObject(p);


            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Não pode ser criado");
        }




    }

     public static juros lerJuros() {
       juros a = new juros();
        try {
            FileInputStream fis = new FileInputStream("docs/juros.dat");
            try {
                ObjectInputStream obj = new ObjectInputStream(fis);
                System.out.println("Lendo arquivo");
                return (a = (juros) obj.readObject());

                      } catch (ClassNotFoundException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            System.out.println("Não foi encontrado o arquivo");
            armazenarJuros(a);
            return a;
        }
        return a;
    }


}
